home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / net / garp.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  2.6 KB  |  129 lines

  1. #ifndef _NET_GARP_H
  2. #define _NET_GARP_H
  3.  
  4. #include <net/stp.h>
  5.  
  6. #define GARP_PROTOCOL_ID    0x1
  7. #define GARP_END_MARK        0x0
  8.  
  9. struct garp_pdu_hdr {
  10.     __be16    protocol;
  11. };
  12.  
  13. struct garp_msg_hdr {
  14.     u8    attrtype;
  15. };
  16.  
  17. enum garp_attr_event {
  18.     GARP_LEAVE_ALL,
  19.     GARP_JOIN_EMPTY,
  20.     GARP_JOIN_IN,
  21.     GARP_LEAVE_EMPTY,
  22.     GARP_LEAVE_IN,
  23.     GARP_EMPTY,
  24. };
  25.  
  26. struct garp_attr_hdr {
  27.     u8    len;
  28.     u8    event;
  29.     u8    data[];
  30. };
  31.  
  32. struct garp_skb_cb {
  33.     u8    cur_type;
  34. };
  35.  
  36. static inline struct garp_skb_cb *garp_cb(struct sk_buff *skb)
  37. {
  38.     BUILD_BUG_ON(sizeof(struct garp_skb_cb) >
  39.              FIELD_SIZEOF(struct sk_buff, cb));
  40.     return (struct garp_skb_cb *)skb->cb;
  41. }
  42.  
  43. enum garp_applicant_state {
  44.     GARP_APPLICANT_INVALID,
  45.     GARP_APPLICANT_VA,
  46.     GARP_APPLICANT_AA,
  47.     GARP_APPLICANT_QA,
  48.     GARP_APPLICANT_LA,
  49.     GARP_APPLICANT_VP,
  50.     GARP_APPLICANT_AP,
  51.     GARP_APPLICANT_QP,
  52.     GARP_APPLICANT_VO,
  53.     GARP_APPLICANT_AO,
  54.     GARP_APPLICANT_QO,
  55.     __GARP_APPLICANT_MAX
  56. };
  57. #define GARP_APPLICANT_MAX    (__GARP_APPLICANT_MAX - 1)
  58.  
  59. enum garp_event {
  60.     GARP_EVENT_REQ_JOIN,
  61.     GARP_EVENT_REQ_LEAVE,
  62.     GARP_EVENT_R_JOIN_IN,
  63.     GARP_EVENT_R_JOIN_EMPTY,
  64.     GARP_EVENT_R_EMPTY,
  65.     GARP_EVENT_R_LEAVE_IN,
  66.     GARP_EVENT_R_LEAVE_EMPTY,
  67.     GARP_EVENT_TRANSMIT_PDU,
  68.     __GARP_EVENT_MAX
  69. };
  70. #define GARP_EVENT_MAX        (__GARP_EVENT_MAX - 1)
  71.  
  72. enum garp_action {
  73.     GARP_ACTION_NONE,
  74.     GARP_ACTION_S_JOIN_IN,
  75.     GARP_ACTION_S_LEAVE_EMPTY,
  76. };
  77.  
  78. struct garp_attr {
  79.     struct rb_node            node;
  80.     enum garp_applicant_state    state;
  81.     u8                type;
  82.     u8                dlen;
  83.     unsigned char            data[];
  84. };
  85.  
  86. enum garp_applications {
  87.     GARP_APPLICATION_GVRP,
  88.     __GARP_APPLICATION_MAX
  89. };
  90. #define GARP_APPLICATION_MAX    (__GARP_APPLICATION_MAX - 1)
  91.  
  92. struct garp_application {
  93.     enum garp_applications    type;
  94.     unsigned int        maxattr;
  95.     struct stp_proto    proto;
  96. };
  97.  
  98. struct garp_applicant {
  99.     struct garp_application    *app;
  100.     struct net_device    *dev;
  101.     struct timer_list    join_timer;
  102.  
  103.     spinlock_t        lock;
  104.     struct sk_buff_head    queue;
  105.     struct sk_buff        *pdu;
  106.     struct rb_root        gid;
  107. };
  108.  
  109. struct garp_port {
  110.     struct garp_applicant    *applicants[GARP_APPLICATION_MAX + 1];
  111. };
  112.  
  113. extern int    garp_register_application(struct garp_application *app);
  114. extern void    garp_unregister_application(struct garp_application *app);
  115.  
  116. extern int    garp_init_applicant(struct net_device *dev,
  117.                     struct garp_application *app);
  118. extern void    garp_uninit_applicant(struct net_device *dev,
  119.                       struct garp_application *app);
  120.  
  121. extern int    garp_request_join(const struct net_device *dev,
  122.                   const struct garp_application *app,
  123.                   const void *data, u8 len, u8 type);
  124. extern void    garp_request_leave(const struct net_device *dev,
  125.                    const struct garp_application *app,
  126.                    const void *data, u8 len, u8 type);
  127.  
  128. #endif /* _NET_GARP_H */
  129.